const express = require('express');
const axios = require('axios');
const cors = require('cors');

const app = express();
app.use(cors({ origin: true, credentials: true }));
app.use(express.json());

// 配置：认证中心地址、本应用地址
const AUTH_SERVER_URL = 'http://localhost:3000';
const APP1_URL = 'http://localhost:3001';


// 在app1/server.js顶部添加
const path = require('path');
app.use(express.static(path.join(__dirname, 'public')));

// 替换原首页路由为静态文件
app.get('/', (req, res) => {
  res.sendFile(path.join(__dirname, 'public', 'index.html'));
});

// 验证 Token 有效性（调用认证中心接口）
const verifyToken = async (token) => {
  try {
    const res = await axios.post(`${AUTH_SERVER_URL}/verify-token`, { token });
    return res.data;
  } catch (err) {
    return { valid: false };
  }
};

// 首页接口：未登录则重定向到认证中心
app.get('/', async (req, res) => {
  const { accessToken } = req.query;

  // 1. 检查是否有 Access Token
  if (!accessToken) {
    // 无 Token，重定向到认证中心登录（携带本应用回调地址）
    return res.redirect(`${AUTH_SERVER_URL}/login?redirectUrl=${APP1_URL}`);
  }

  // 2. 验证 Token 有效性
  const verification = await verifyToken(accessToken);
  if (!verification.valid) {
    return res.redirect(`${AUTH_SERVER_URL}/login?redirectUrl=${APP1_URL}`);
  }

  // 3. Token 有效，返回应用内容
  res.send(`
    <h1>应用1 - 已登录</h1>
    <p>当前用户：${verification.user.username}</p>
    <a href="http://localhost:3002?accessToken=${accessToken}">跳转到应用2</a><br>
    <button onclick="fetch('${AUTH_SERVER_URL}/logout', { method: 'POST', credentials: 'include' }).then(() => window.location.href='${APP1_URL}')">登出</button>
  `);
});

// 启动服务（端口 3001）
app.listen(3001, () => {
  console.log('应用1运行在 http://localhost:3001');
});